package org.hfy.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ClassPathResource;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

/**
 * 合同模板预处理器
 * 用于在现有模板中添加占位符，方便数据填充
 * 
 * @author hfy
 * @version 1.0
 */
@Slf4j
public class ContractTemplatePreprocessor {

    /**
     * 预处理合同模板，添加占位符
     * 这个方法可以用来一次性修改模板文件
     */
    public static void preprocessTemplate() {
        try (InputStream templateInputStream = new ClassPathResource("templates/合同模板.xlsx").getInputStream();
             XSSFWorkbook workbook = new XSSFWorkbook(templateInputStream)) {
            
            Sheet sheet = workbook.getSheetAt(0);
            
            // 添加占位符到模板中
            addPlaceholdersToTemplate(sheet);
            
            // 保存修改后的模板
            try (FileOutputStream outputStream = new FileOutputStream("backend/pcberp/src/main/resources/templates/合同模板_带占位符.xlsx")) {
                workbook.write(outputStream);
                log.info("模板预处理完成，已保存为 合同模板_带占位符.xlsx");
            }
            
        } catch (Exception e) {
            log.error("模板预处理失败: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 在模板中添加占位符
     */
    private static void addPlaceholdersToTemplate(Sheet sheet) {
        // 这里可以根据模板的实际结构添加占位符
        // 示例：在第一行添加标题占位符
        
        // 查找并替换可能的文本内容
        for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
            Row row = sheet.getRow(rowIndex);
            if (row == null) continue;
            
            for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {
                Cell cell = row.getCell(cellIndex);
                if (cell == null || cell.getCellType() != CellType.STRING) continue;
                
                String cellValue = cell.getStringCellValue();
                if (cellValue == null || cellValue.trim().isEmpty()) continue;
                
                // 替换常见的文本为占位符
                String newValue = addPlaceholdersToText(cellValue);
                if (!cellValue.equals(newValue)) {
                    cell.setCellValue(newValue);
                    log.info("行{}, 列{}: '{}' -> '{}'", rowIndex + 1, cellIndex + 1, cellValue, newValue);
                }
            }
        }
    }
    
    /**
     * 在文本中添加占位符
     */
    private static String addPlaceholdersToText(String text) {
        if (text == null) return "";
        
        // 根据文本内容添加相应的占位符
        if (text.contains("合同编号") && !text.contains("${")) {
            return text + "：${合同编号}";
        }
        if (text.contains("客户名称") && !text.contains("${")) {
            return text + "：${客户名称}";
        }
        if (text.contains("业务员") && !text.contains("${")) {
            return text + "：${业务员}";
        }
        if (text.contains("订单日期") && !text.contains("${")) {
            return text + "：${订单日期}";
        }
        if (text.contains("总金额") && !text.contains("${")) {
            return text + "：${总金额}";
        }
        if (text.contains("付款方式") && !text.contains("${")) {
            return text + "：${付款方式}";
        }
        
        return text;
    }
    
    /**
     * 主方法，用于运行模板预处理
     */
    public static void main(String[] args) {
        preprocessTemplate();
    }
} 